# 所有函数描述列表
import numpy as np
from apps.cpm.tes.range_utils import RangeUtils
from apps.cpm.tes.snr_range_utils import SnrRangeUtils
from core.radar_core import RadarCore
from apps.cpm.agent.snr_rcss_ranges_agent import SnrRcssRangesAgent
from apps.cpm.agent.snr_pts_ranges_agent import SnrPtsRangesAgent
from apps.cpm.mcp.draw_x_ys_mcpc_fm import DrawXYsMcpcFm

class FunctionRegistry(object):
    FC_PROMPT = '''
请根据描述与列表中desc进行匹配，选择最符合条件的列表条目，并返回funct_name值。

候选列表：
[
{'desc': '将距离范围划分为指定等份', 'func_name': 'divide_ranges'},
{'desc': '雷达方程计算信噪比，单位为分贝', 'func_name': 'radar_eq_snr_db'},
{'desc': '绘制信噪比与距离间关系', 'func_name': 'draw_snr_range'},
{'desc': '雷达方程计算信噪比在不同RCS下与距离的关系', 'func_name': 'snr_rcss_ranges'},
{'desc': '雷达方程计算信噪比在不同发射功率下与距离的关系', 'func_name': 'snr_pts_ranges'}
]

示例：
输入：距离范围进行等分
输出：<|func_name|_start>divide_ranges<|func_name|_end>
输入：用雷达方程计算信噪比，信噪比单位为分贝
输出：<|func_name|_start>radar_eq_snr_db<|func_name|_end>
输入：绘制信噪比与距离间关系
输出：<|func_name|_start>draw_snr_range<|func_name|_end>
输入：雷达方程计算信噪比在不同RCS下与距离的关系
输出：<|func_name|_start>snr_rcss_ranges<|func_name|_end>
输入：雷达方程计算信噪比在不同发射功率下与距离的关系
输出：<|func_name|_start>snr_pts_ranges<|func_name|_end>

输出格式：
<|func_name|_start>对应的func_name<|func_name|_end>

当前输入：
'''

    def __init__(self):
        self.name = 'apps.cpm.function_registry.FunctionRegistry'

    FUNCTIONS = {
        'divide_ranges': {
            'function': RangeUtils.divide_ranges0,
            'description': '将距离范围划分为指定等份',
            'type': 'function',
            'parameters': {
                'near': {'type': 'float', 'description': '距离范围近点，单位：公里'},
                'far': {'type': 'float', 'description': '距离范围远点，单位：公里)', 'default': 1e-6},
                'num': {'type': 'int', 'description': '划分份数'}
            },
            'results': {
                'range_values': {'type': 'np.ndarray', 'description': '距离等分列表'}
            }
        },
        'radar_eq_snr_db': {
            'function': RadarCore.radar_eq,
            'description': '雷达方程计算信噪比，单位为分贝',
            'type': 'function',
            'parameters': {
                'pt': {'type': 'float', 'description': '峰值发射功率，单位：瓦'},
                'freq': {'type': 'float', 'description': '频率，单位：赫兹'},
                'g': {'type': 'float', 'description': '天线增益，单位：分贝'},
                'sigma': {'type': 'float', 'description': '雷达截面积RCS，单位：平方米'},
                'te': {'type': 'float', 'description': '有效噪声温度，单位：开尔文'},
                'b': {'type': 'float', 'description': '带宽，单位：赫兹'},
                'nf': {'type': 'float', 'description': '噪声数，单位：分贝'},
                'loss': {'type': 'float', 'description': '系统损失，单位：分贝'},
                'range_values': {'type': 'np.ndarray', 'description': '距离等分序列，单位：米'}
            },
            'results': {
            }
        },
        'snr_rcss_ranges': {
            'function': SnrRcssRangesAgent.run,
            'description': '雷达方程计算信噪比在不同RCS下与距离的关系',
            'type': 'agent',
            'parameters': {
                'context': {'type': 'RlmContext', 'description': 'Context of the system'}
            },
            'results': {
            }
        },
        'snr_pts_ranges': {
            'function': SnrPtsRangesAgent.run,
            'description': '雷达方程计算信噪比在不同发射功率下与距离的关系',
            'type': 'agent',
            'parameters': {
                'context': {'type': 'RlmContext', 'description': 'Context of the system'}
            },
            'results': {
            }
        },
        'draw_snr_range': {
            'function': DrawXYsMcpcFm.call_mcp_server,
            'description': '绘制信噪比与距离间关系',
            'type': 'mcp',
            'parameters': {
                'x': {'type': 'np.ndarray', 'description': 'x轴坐标'},
                'ys': {'type': 'List', 'description': '多个y轴坐标'}
            },
            'results': {
                'img_fn': {'type': 'str', 'description': '绘制图形的文件名'}
            }
        }
    }